const express = require('express');
const cors = require('cors');
require('dotenv').config();

const redisClient = require('./redis/client');
const userRoutes = require('./routes/users');

const app = express();
const PORT = process.env.PORT || 3000;

// 中间件
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// 路由
app.use('/api/users', userRoutes);

// Redis 状态检查路由
app.get('/api/redis/status', async (req, res) => {
  try {
    await redisClient.set('health-check', 'OK', 10);
    const value = await redisClient.get('health-check');
    
    res.json({
      status: 'connected',
      message: 'Redis is working properly',
      testValue: value
    });
  } catch (error) {
    res.status(500).json({
      status: 'error',
      message: 'Redis connection failed',
      error: error.message
    });
  }
});

// 缓存管理路由
app.delete('/api/cache/clear', async (req, res) => {
  try {
    // 在实际项目中，你可能需要使用更复杂的方式来清除特定模式的缓存
    // 这里只是简单示例
    const keys = await redisClient.client.keys('cache:*');
    
    if (keys.length > 0) {
      for (const key of keys) {
        await redisClient.del(key);
      }
    }
    
    res.json({
      message: '缓存清除成功',
      clearedKeys: keys.length
    });
  } catch (error) {
    res.status(500).json({
      error: '清除缓存失败',
      message: error.message
    });
  }
});

// 错误处理中间件
app.use((err, req, res, next) => {
  console.error('Error:', err);
  res.status(500).json({
    error: '服务器内部错误',
    message: err.message
  });
});

// 404 处理
app.use('*', (req, res) => {
  res.status(404).json({
    error: '路由不存在',
    path: req.originalUrl
  });
});

// 启动服务器
app.listen(PORT, () => {
  console.log(`服务器运行在 http://localhost:${PORT}`);
  console.log(`Redis 连接: ${process.env.REDIS_HOST}:${process.env.REDIS_PORT}`);
});

// 优雅关闭
process.on('SIGINT', async () => {
  console.log('\n正在关闭服务器...');
  await redisClient.client.quit();
  process.exit(0);
});